package br.edu.ufcg.unknown.semantico.arvore;

import java.io.File;

import junit.framework.TestCase;
import br.edu.ufcg.unknown.exception.UnknownException;
import br.edu.ufcg.unknown.lexico.AnalisadorLexico;
import br.edu.ufcg.unknown.lexico.Token;

public class GeradorDeArvoresTest extends TestCase {

	private GeradorDeArvores gda;

	private AnalisadorLexico al;
	
	private final File PALAVRAS_RESERVADAS = new File("resources/palavras-reservadas.txt");

	@Override
	protected void setUp() throws Exception {
		super.setUp();
		gda = new GeradorDeArvores();
		assertTrue(PALAVRAS_RESERVADAS.exists());
	}
	
	@Override
	protected void tearDown()throws Exception {
		super.tearDown();
		gda = null;
	}

//	public void testSimples() throws UnknownException {
//
//		init("3 + 4");
//		alimentarGerador();
//		
//		init("3 + 4");
//		Nodo n3 = new Nodo(al.getProxToken(), true);
//		Nodo nMais = new Nodo(al.getProxToken(), false);
//		Nodo n4 = new Nodo(al.getProxToken(), true);
//		
//		nMais.setFilhoEsquerda(n3);
//		nMais.setFilhoDireita(n4);
//		
//		Nodo raizEsperada = nMais;
//		Nodo raizRecebida = this.gda.getRaiz();
//		assertEquals(raizEsperada, raizRecebida);
//
//	}
	
	public void testSimples2() throws UnknownException {

		init("3 AND 4");
		alimentarGerador();
		
		init("3 AND 4");
		Nodo n3 = new Nodo(al.getProxToken(), true);
		System.out.println(n3.getTipo().getToken().getLexema());
		Nodo nAnd = new Nodo(al.getProxToken(), false);
		System.out.println(nAnd.getTipo().getToken().ehTerminal());
		Nodo n4 = new Nodo(al.getProxToken(), true);
		System.out.println(n4.getTipo().getToken().getLexema());
		
		nAnd.setFilhoEsquerda(n3);
		nAnd.setFilhoDireita(n4);
		
		Nodo raizEsperada = nAnd;
		Nodo raizRecebida = this.gda.getRaiz();
		System.out.println(raizRecebida.getTipo().getToken().getLexema());
		assertTrue(raizEsperada.equals(raizRecebida));
		assertEquals(raizEsperada, raizRecebida);

	}

	private void init(String input) throws UnknownException {
		al = new AnalisadorLexico(input, PALAVRAS_RESERVADAS);
	}

	private void alimentarGerador() {
		Token tk = null;

		while ((tk = al.getProxToken()) != null) {
			this.gda.addNodo(new Nodo(tk));
		}
	}

}
